﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BussinesLayer.Clases;
using CustomControl;
using DTO.Clases;
using Utilities;

namespace Aplicacion.Ventas.Factura
{
    public partial class FrmCancelarVenta : Form
    {
        private BussinesFormaPago miBussinesPago;

        //public DateTime Fecha { set; get; }
        public string NumeroFactura { set; get; }
        Validacion validacion;
        private bool Efectivo = false;
        private bool Cheque = false;
        private bool Tarjeta = false;
        private bool Venta = true;
        public bool Abono = false;

        public FrmCancelarVenta()
        {
            InitializeComponent();
            miBussinesPago = new BussinesFormaPago();
            validacion = new Validacion();
        }

        private void FrmCancelarVenta_Load(object sender, EventArgs e)
        {
            
        }

        private void FrmCancelarVenta_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F6)
            
            
            {
                txtEfectivo_Validating(txtEfectivo, new CancelEventArgs(false));
                txtCheque_Validating(txtCheque, new CancelEventArgs(false));
                txtTarjeta_Validating(txtTarjeta, new CancelEventArgs(false));
                if (Venta)
                {
                    if (!Abono)
                    {
                        if (Efectivo && Cheque && Tarjeta)
                        {
                            var suma = UseObject.RemoveSeparatorMil(txtEfectivo.Text) +
                                       UseObject.RemoveSeparatorMil(txtCheque.Text) +
                                       UseObject.RemoveSeparatorMil(txtTarjeta.Text);
                            if (suma >= UseObject.RemoveSeparatorMil(txtTotal.Text))
                            {
                                DialogResult rta = MessageBox.Show("¿Está seguro(a) de querer cerrar la venta?",
                                "Cerrar Venta", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                                if (rta == DialogResult.Yes)
                                {
                                    txtCambio.Text = UseObject.InsertSeparatorMil
                                    (
                                        ((UseObject.RemoveSeparatorMil(txtEfectivo.Text) +
                                         UseObject.RemoveSeparatorMil(txtCheque.Text) +
                                         UseObject.RemoveSeparatorMil(txtTarjeta.Text)) -
                                         UseObject.RemoveSeparatorMil(txtTotal.Text))
                                         .ToString()
                                    );
                                    var formas = FormasDePago();
                                    CompletaEventos.CapturaEvento(formas);
                                    Venta = false;
                                    formas = null;
                                    this.Close();
                                }
                            }
                            else
                            {
                                OptionPane.MessageInformation("El valor ingresado debe ser superior " +
                                    "al de la venta.");
                            }
                        }
                        /*DialogResult rta = MessageBox.Show("¿Está seguro(a) de querer cerrar la venta?",
                                "Cerrar Venta", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                        if (rta == DialogResult.Yes)
                        {
                            
                        }*/
                    }
                    else
                    {
                        DialogResult rta = MessageBox.Show("¿Está seguro(a) de querer realizar el abono?",
                                "Realizar Abono", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                        if (rta == DialogResult.Yes)
                        {
                            if (Efectivo && Cheque && Tarjeta)
                            {
                                var suma = UseObject.RemoveSeparatorMil(txtEfectivo.Text) +
                                           UseObject.RemoveSeparatorMil(txtCheque.Text) +
                                           UseObject.RemoveSeparatorMil(txtTarjeta.Text);

                                var formas = FormasDePago();
                                
                                    try
                                    {
                                        foreach (FormaPago pago in formas)
                                        {
                                            if (pago.Valor != 0)
                                            {
                                                pago.NumeroFactura = NumeroFactura;
                                                pago.Fecha = DateTime.Now;
                                                miBussinesPago.IngresarPagoAFactura(pago, true);
                                                
                                            }
                                        }
                                        OptionPane.MessageInformation("El abono se realizó con éxito.");
                                    }
                                    catch (Exception ex)
                                    {
                                        OptionPane.MessageError(ex.Message);
                                    }
                            }
                        }
                    }
                }
            }
            else
            {
                if (e.KeyData == Keys.Escape)
                {
                    this.Close();
                    /*DialogResult rta = MessageBox.Show("¿Está seguro(a) de querer cerrar la venta?",
                        "Cerrar Venta", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (rta == DialogResult.Yes)
                    {
                        OptionPane.MessageSuccess("La venta se realizó con éxito!");
                        CompletaEventos.CapturaEvento(true);
                        this.Close();
                    }*/
                }
            }
        }

        private void FrmCancelarVenta_FormClosing(object sender, FormClosingEventArgs e)
        {
            CompletaEventos.CapturaEvento(false);
        }

        private void txtEfectivo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.Equals((char)Keys.Enter))
            {
                txtCheque.Focus();
            }
        }

        private void txtEfectivo_Validating(object sender, CancelEventArgs e)
        {
            if (!String.IsNullOrEmpty(txtEfectivo.Text))
            {
                txtEfectivo.Text = txtEfectivo.Text.Replace(".", "");
                if (validacion.ValidarNumeroInt(txtEfectivo.Text))
                {
                    txtEfectivo.Text = UseObject.InsertSeparatorMil(txtEfectivo.Text);
                    Efectivo = true;
                }
                else
                {
                    OptionPane.MessageError("El valor del Efectivo es incorrecto.");
                    Efectivo = false;
                }
            }
            else
            {
                txtEfectivo.Text = "0";
                Efectivo = true;
            }
        }

        private void txtCheque_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.Equals((char)Keys.Enter))
            {
                txtTarjeta.Focus();
            }
        }

        private void txtCheque_Validating(object sender, CancelEventArgs e)
        {
            if (!String.IsNullOrEmpty(txtCheque.Text))
            {
                txtCheque.Text = txtCheque.Text.Replace(".", "");
                if (validacion.ValidarNumeroInt(txtCheque.Text))
                {
                    txtCheque.Text = UseObject.InsertSeparatorMil(txtCheque.Text);
                    Cheque = true;
                }
                else
                {
                    OptionPane.MessageError("El valor del Cheque es incorrecto.");
                    Cheque = false;
                }
            }
            else
            {
                txtCheque.Text = "0";
                Cheque = true;
            }
        }

        private void txtTarjeta_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.Equals((char)Keys.Enter))
            {
                FrmCancelarVenta_KeyDown(this, new KeyEventArgs(Keys.F6));
            }
        }

        private void txtTarjeta_Validating(object sender, CancelEventArgs e)
        {
            if (!String.IsNullOrEmpty(txtTarjeta.Text))
            {
                txtTarjeta.Text = txtTarjeta.Text.Replace(".", "");
                if (validacion.ValidarNumeroInt(txtTarjeta.Text))
                {
                    txtTarjeta.Text = UseObject.InsertSeparatorMil(txtTarjeta.Text);
                    Tarjeta = true;
                }
                else
                {
                    OptionPane.MessageError("El valor de la Tarjeta es incorrecto.");
                    Tarjeta = false;
                }
            }
            else
            {
                txtTarjeta.Text = "0";
                Tarjeta = true;
            }
        }

        private List<DTO.Clases.FormaPago> FormasDePago()
        {
            var Formas = new List<DTO.Clases.FormaPago>();
            Formas.Add(new DTO.Clases.FormaPago
            {
                IdFormaPago = 1,
                Valor = Convert.ToInt32
                (UseObject.RemoveSeparatorMil(txtEfectivo.Text))
            });
            Formas.Add(new DTO.Clases.FormaPago
            {
                IdFormaPago = 2,
                Valor = Convert.ToInt32
                (UseObject.RemoveSeparatorMil(txtCheque.Text))
            });
            Formas.Add(new DTO.Clases.FormaPago
            {
                IdFormaPago = 3,
                Valor = Convert.ToInt32
                (UseObject.RemoveSeparatorMil(txtTarjeta.Text))
            });
            return Formas;
        }
    }
}